home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / library / reqtlsdv.lha / ReqTools / Glue / M2Amiga / m2amiga_glue.lha / ReqToolsDemo.mod < prev    next >
Text File  |  1992-08-11  |  17KB  |  431 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       ReqToolsDemo
  3.   :Contents.      Demonstrates use auf Nico François' reqtools.library
  4.   :Author.        Kai Bolay [kai] (C-Version by Nico François)
  5.   :Address.       Hoffmannstraße 168
  6.   :Address.       D-7250 Leonberg 1 (Germany)
  7.   :Address.       UUCP: ...!cbmvax!cbmehq!cbmger!depot1!amokle!kai
  8.   :Address.       FIDO: 2:247/706.3
  9.   :History.       v1.0 [kai] 22-Nov-91 (translated from C)
  10.   :History.       v1.0m [Frank Lömker] 24-Feb-92 Umsetzung nach Modula
  11.   :History.       v2.0m [Frank Lömker] 10-Aug-92 ReqTools V38
  12.   :Copyright.     Public Domain
  13.   :Language.      Modula
  14.   :Translator.    M2Amiga V4.0d
  15.   :Imports.       ReqTools, ReqToolsSupport
  16.   :Remark.        Thanks to Nico for his great library
  17.   :Bugs.          ReqTools/Arq should support each other
  18.   :Bugs.          Font-Hook: ta.name can contain odd pointer :-(
  19. ------------------------------------------------------------------------ *)
  20.  
  21. (*********************************
  22. *                                *
  23. *  reqtools.library (V38)        *
  24. *                                *
  25. *  Release 2.0                   *
  26. *                                *
  27. *  (c) 1991/1992 Nico François   *
  28. *                                *
  29. *  demo.c                        *
  30. *                                *
  31. *  This source is public domain  *
  32. *  in all respects.              *
  33. *                                *
  34. *********************************)
  35.  
  36. MODULE ReqToolsDemo;
  37. (*$ DEFINE DoHook:=FALSE *)
  38.  
  39. FROM GraphicsD IMPORT TextAttrPtr;
  40. FROM DosL IMPORT Output,Write;
  41. FROM DosD IMPORT FileInfoBlockPtr;
  42. FROM IntuitionD IMPORT IDCMPFlags,IDCMPFlagSet;
  43. FROM SYSTEM IMPORT ADDRESS,ADR,SETREG,REG,TAG,CAST,LONGSET;
  44. FROM Arts IMPORT kickVersion;
  45. FROM UtilityD IMPORT Hook,HookPtr,tagEnd;
  46. FROM String IMPORT Length;
  47. IMPORT rt: ReqTools;
  48. FROM ReqToolsSupport IMPORT EZRequest,vEZRequest,EZRequestTags,vEZRequestTags;
  49.  
  50. VAR tagbuf:ARRAY [0..11] OF LONGINT;
  51.     filereq: rt.FileRequesterPtr;
  52.     fontreq: rt.FontRequesterPtr;
  53.     scrmodereq: rt.ScreenModeRequesterPtr;
  54.     myhook: Hook;
  55.     buffer: ARRAY [0..127] OF CHAR;
  56.     filename: ARRAY [0..33] OF CHAR;
  57.     longnum, ret, color: LONGINT;
  58.     adr, adr2: ADDRESS;
  59.  
  60. PROCEDURE myputs (str: ARRAY OF CHAR);
  61. BEGIN
  62.   IF Output() # NIL THEN
  63.     (*$ StackParms:=TRUE *)
  64.     SETREG (0,Write (Output(), ADR(str), Length (str) ));
  65.     (*$ POP StackParms *)
  66.   END;
  67. END myputs;
  68.  
  69. (*$ IF DoHook *)
  70.  
  71. (*$ StackChk:=FALSE SaveA4:=TRUE *)
  72. PROCEDURE FileFilterfunc (hook{8}: HookPtr;
  73.                       filereq{10}: ADDRESS;
  74.                       fib{9}: ADDRESS):ADDRESS;
  75. BEGIN
  76.   SETREG (12,hook^.data);
  77.   myputs (CAST(FileInfoBlockPtr,fib)^.fileName); myputs ("\n");
  78.   RETURN ADDRESS(TRUE);
  79. END FileFilterfunc;
  80. (*$ POP StackChk *)
  81.  
  82. (*$ StackChk:=FALSE SaveA4:=TRUE *)
  83. PROCEDURE FontFilterfunc (hook{8}: HookPtr;
  84.                           fontreq{10}: ADDRESS;
  85.                           textattr{9}: ADDRESS):ADDRESS;
  86. VAR n:POINTER TO ARRAY [0..127] OF CHAR;
  87. BEGIN
  88.   SETREG (12,hook^.data);
  89.   n:=CAST(TextAttrPtr,textattr)^.name;
  90.   myputs (n^); (* May contain odd Pointer :-( *)
  91.   myputs ("\n");   (* ^ Bei mir (Frank) hat es funktioniert *)
  92.   RETURN  ADDRESS(TRUE);
  93. END FontFilterfunc;
  94. (*$ POP StackChk *)
  95.  
  96. (*$ StackChk:=FALSE SaveA4:=TRUE *)
  97. PROCEDURE VolFilterfunc (hook{8}: HookPtr;
  98.                          filereq{10}: ADDRESS;
  99.                          volentry{9}: ADDRESS):ADDRESS;
  100. VAR n:POINTER TO ARRAY [0..127] OF CHAR;
  101. BEGIN
  102.   SETREG (12,hook^.data);
  103.   IF CAST(rt.VolumeEntryPtr,volentry)^.type=0 THEN myputs ("(Volume) ");
  104.                                               ELSE myputs ("(Assign) "); END;
  105.   n:=CAST(rt.VolumeEntryPtr,volentry)^.name;
  106.   myputs (n^); myputs ("\n");
  107.   RETURN ADDRESS(TRUE);
  108. END VolFilterfunc;
  109. (*$ POP StackChk *)
  110.  
  111. (*$ ENDIF *)
  112.  
  113. BEGIN
  114.   vEZRequest (ADR("ReqTools 2.0 Demo\n"+
  115.               "~~~~~~~~~~~~~~~~~\n"+
  116.               "'reqtools.library' offers several\ndifferent types of requesters:"),
  117.               ADR("Let's see them"), NIL, NIL, NIL);
  118.  
  119.   vEZRequest (ADR("NUMBER 1:\nThe larch :-)"),ADR("Be serious!"), NIL, NIL,NIL);
  120.  
  121.   vEZRequest (ADR("NUMBER 1:\nString requester\nfunction: rt.GetString()"),
  122.               ADR("Show me"),NIL, NIL, NIL);
  123.  
  124.   buffer := "A bit of text";
  125.   IF NOT rt.GetString (ADR(buffer), 127,ADR("Enter anything:"), NIL,TAG(tagbuf,tagEnd)) THEN
  126.     vEZRequest (ADR("You entered nothing :-("),ADR("I'm sorry"),NIL, NIL, NIL);
  127.   ELSE
  128.     adr:=TAG(tagbuf,ADR (buffer));
  129.     vEZRequest (ADR("You entered this string:\n'%s'."),
  130.                 ADR("So I did"), NIL, NIL, adr );
  131.   END;
  132.   adr:=ADR(" _Ok |New _2.0 feature!|_Cancel");
  133.   adr2:=ADR("These are two new features of ReqTools 2.0:\n"+
  134.             "Text above the entry gadget and more than\n"+
  135.             "one response gadget.");
  136.   IF rt.GetString (ADR(buffer),127,ADR("Enter anything:"),NIL,
  137.                    TAG(tagbuf,rt.gsGadFmt,adr,
  138.                    rt.gsTextFmt,adr2,rt.Underscore,"_",tagEnd)) THEN END;
  139.   adr:=ADR(" _Ok |_Abort|_Cancel");
  140.   adr2:=ADR("New is also the ability to switch off the\n"+
  141.             "backfill pattern.  You can also center the\n"+
  142.             "text above the entry gadget.\n"+
  143.             "These new features are also available in\n"+
  144.             "the rtGetLong() requester.");
  145.   IF rt.GetString (ADR(buffer), 127,ADR("Enter anything:"),NIL,
  146.                    TAG(tagbuf,rt.gsGadFmt,adr,rt.gsTextFmt,adr2,
  147.                    rt.gsBackfill,FALSE,
  148.                    rt.gsFlags,LONGSET{rt.gsReqCenterText,rt.gsReqHighlightText},
  149.                    rt.Underscore,"_",tagEnd)) THEN END;
  150.  
  151.   vEZRequest (ADR("NUMBER 2:\nNumber requester\nfunction: rt.GetLong()"),
  152.               ADR("Show me"),NIL, NIL, NIL);
  153.  
  154.   IF NOT rt.GetLong (longnum,ADR("Enter a number:"), NIL,
  155.                      TAG(tagbuf,rt.glShowDefault,FALSE,tagEnd)) THEN
  156.     vEZRequest (ADR("You entered nothing :-("),ADR("I'm sorry"),NIL, NIL, NIL);
  157.   ELSE
  158.     adr:=ADR(longnum);
  159.     vEZRequest (ADR("The number you entered was:\n%ld"),
  160.                 ADR("So it was"), NIL, NIL,adr);
  161.   END;
  162.  
  163.   vEZRequest (ADR("NUMBER 3:\nMessage requester, the requester\n"+
  164.               "you've been using all the time!\nfunction: rt.EZRequest()"),
  165.               ADR("Show me more"),NIL, NIL, NIL);
  166.  
  167.   vEZRequest (ADR("Simplest usage: some body text and\na single centered gadget."),
  168.               ADR("Got it"),NIL, NIL, NIL);
  169.  
  170.   WHILE NOT (EZRequest (ADR("You can also use two gadgets to\n"+
  171.                         "ask the user something.\n"+
  172.                         "Do you understand?"),ADR("Of course|Not really"),
  173.                         NIL, NIL, NIL) # 0) DO
  174.     vEZRequest (ADR("You are not one of the brightest are you?\n"+
  175.                 "We'll try again..."),
  176.                 ADR("Ok"),NIL, NIL, NIL);
  177.   END; (* WHILE *)
  178.  
  179.   vEZRequest (ADR("Great, we'll continue then."),ADR("Fine"),NIL, NIL, NIL);
  180.  
  181.   CASE EZRequest (ADR("You can also put up a requester with\n"+
  182.                   "three choices.\n"+
  183.                   "How do you like the demo so far ?"),
  184.                   ADR("Great|So so|Rubbish"),NIL, NIL, NIL) OF
  185.     | 0:
  186.       vEZRequest (ADR("Too bad, I really hoped you\nwould like it better."),
  187.                   ADR("So what"),NIL, NIL, NIL);
  188.     | 1:
  189.       vEZRequest (ADR("I'm glad you like it so much."),ADR("Fine"),NIL, NIL, NIL);
  190.     | 2:
  191.       vEZRequest (ADR("Maybe if you run the demo again\n"+
  192.                   "you'll REALLY like it."),
  193.                   ADR("Perhaps"),NIL, NIL, NIL);
  194.   END; (* CASE *)
  195.  
  196.   ret := EZRequestTags (ADR("The number of responses is not limited to three\n"+
  197.                         "as you can see.  The gadgets are labeled with\n"+
  198.                         "the return code from rt.EZRequest().\n"+
  199.                         "Pressing Return will choose 4, note that\n"+
  200.                         "4's button text is printed in boldface."),
  201.                         ADR("1|2|3|4|5|0"), NIL, NIL,
  202.                         TAG(tagbuf,rt.ezDefaultResponse, 4, tagEnd));
  203.   adr:=ADR(ret);
  204.   vEZRequest (ADR("You picked '%ld'."),ADR("How true"), NIL, NIL,adr);
  205.   vEZRequestTags (ADR("New for Release 2.0 of ReqTools (V38) is\n"+
  206.                   "the possibility to define characters in the\n"+
  207.                   "buttons as keyboard shortcuts.\n"+
  208.                   "As you can see these characters are underlined.\n"+
  209.                   "Pressing shift while still holding down the key\n"+
  210.                   "will cancel the shortcut.\n"+
  211.                   "Note that in other requesters a string gadget may\n"+
  212.                   "be active.  To use the keyboard shortcuts there\n"+
  213.                   "you have to keep the Right Amiga key pressed down."),
  214.                   ADR("_Great|_Fantastic|_Swell|Oh _Boy"),
  215.                   NIL,NIL,
  216.                   TAG(tagbuf,rt.Underscore, '_', tagEnd));
  217.  
  218.   adr := ADR ("five"); tagbuf[5]:=5; tagbuf[6]:=adr;
  219.   adr2:=ADR(tagbuf[5]);
  220.   vEZRequest (
  221.     ADR("You may also use C-style formatting codes in the body text.\n"+
  222.     "Like this:\n\n"+
  223.     "'The number %%ld is written %%s.' will give:\n\n"+
  224.     "The number %ld is written %s.\n\n"+
  225.     "if you also pass '5' and '\"five\"' to rt.EZRequest()."),
  226.     ADR("_Proceed"), NIL, TAG(tagbuf,rt.Underscore,"_",tagEnd),adr2);
  227.  
  228.   IF (diskInserted IN CAST (IDCMPFlagSet,EZRequestTags
  229.              (ADR("It is also possible to pass extra IDCMP flags\n"+
  230.               "that will satisfy rt.EZRequest(). This requester\n"+
  231.               "has had DISKINSERTED passed to it.\n"+
  232.               "(Try insert.ing a disk)."),
  233.               ADR("_Continue"), NIL, NIL,
  234.               TAG(tagbuf,rt.IDCMPFlags,IDCMPFlagSet{diskInserted},rt.Underscore,"_",tagEnd)))) THEN
  235.     vEZRequest (ADR("You inserted a disk."),ADR("I did"),NIL, NIL, NIL);
  236.   ELSE
  237.     vEZRequest (ADR("You used the 'Continue' gadget\n"+
  238.                 "to satisfy the requester."),ADR("I did"),NIL, NIL, NIL);
  239.   END;
  240.  
  241.   vEZRequestTags (ADR("Finally, it is possible to specify the position\n"+
  242.               "of the requester.\n"+
  243.               "E.g. at the top left of the screen, like this.\n"+
  244.               "This works for all requesters, not just rt.EZRequest()!"),
  245.               ADR("_Amazing"), NIL, NIL,
  246.               TAG(tagbuf,rt.ReqPos, rt.ReqPosTopLeftScr,rt.Underscore,"_",tagEnd));
  247.  
  248.   vEZRequestTags (ADR("Alternatively, you can center the\n"+
  249.                   "requester on the screen.\n"+
  250.                   "Check out 'reqtools.doc' for all the possibilities."),
  251.                   ADR("I'll do that"), NIL, NIL,
  252.                   TAG(tagbuf,rt.ReqPos, rt.ReqPosCenterScr,tagEnd));
  253.  
  254.   adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  255.   vEZRequest (ADR("NUMBER 4:\nFile requester\n"+
  256.               "function: rt.FileRequest()"),ADR("_Demonstrate"),NIL,adr,NIL);
  257.  
  258.   filereq := rt.AllocRequestA (rt.TypeFileReq, NIL);
  259.   IF filereq # NIL THEN
  260.  
  261.     (*$ IF DoHook *)
  262.       myhook.entry := FileFilterfunc;
  263.       myhook.data:=REG (8+4);
  264.     (*$ ENDIF *)
  265.  
  266.     filename := ""; adr:=ADR(myhook);
  267.     IF rt.FileRequest (filereq, ADR(filename),ADR("Pick a file"),TAG(tagbuf,
  268.                        (*$ IF DoHook *) rt.fiFilterFunc,adr, (*$ ENDIF *)
  269.                        tagEnd)) THEN
  270.       adr := ADR (filename); adr2 := filereq^.dir;
  271.       adr:=TAG(tagbuf,adr,adr2);
  272.       vEZRequest (ADR("You picked the file:\n'%s'\nin directory:\n'%s'"),
  273.                   ADR("Right"), NIL, NIL,adr);
  274.     ELSE
  275.       vEZRequest (ADR("You didn't pick a file."),ADR("No"),NIL, NIL, NIL);
  276.     END;
  277.  
  278.     rt.FreeRequest (filereq);
  279.   ELSE
  280.     vEZRequest (ADR("Out of memory!"),ADR("Oh boy!"),NIL, NIL, NIL);
  281.   END;  (* IF filereq # NIL *)
  282.  
  283.   adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  284.   vEZRequest (ADR("The file requester can be used\n"+
  285.               "as a directory requester as well."),
  286.               ADR("Let's _see that"),NIL,adr,NIL);
  287.  
  288.   filereq := rt.AllocRequestA (rt.TypeFileReq, NIL);
  289.   IF filereq # NIL THEN
  290.     IF rt.FileRequest (filereq, ADR(filename),ADR("Pick a directory"),
  291.                TAG(tagbuf,rt.fiFlags,LONGSET {rt.fReqNoFiles},tagEnd)) THEN
  292.       adr := ADR(filereq^.dir);
  293.       vEZRequest (ADR("You picked the directory:\n'%s'"),
  294.                   ADR("Right"), NIL, NIL, adr);
  295.     ELSE
  296.       vEZRequest (ADR("You didn't pick a directory."),ADR("No"),NIL, NIL, NIL);
  297.     END;
  298.     rt.FreeRequest (filereq);
  299.   ELSE
  300.     vEZRequest (ADR("Out of memory!"),ADR("Oh boy!"),NIL, NIL, NIL);
  301.   END;  (* IF filereq # NIL *)
  302.  
  303.   vEZRequest (ADR("NUMBER 5:\nFont requester\nfunction: rt.FontRequest()"),
  304.               ADR("Show"),NIL, NIL, NIL);
  305.  
  306.   fontreq := rt.AllocRequestA (rt.TypeFontReq, NIL);
  307.   IF fontreq # NIL THEN
  308.     fontreq^.flags := LONGSET {rt.fReqStyle, rt.fReqColorFonts};
  309.  
  310.     (*$ IF DoHook *)
  311.       myhook.entry := FontFilterfunc;
  312.       myhook.data:=REG (8+4);
  313.     (*$ ENDIF *)
  314.  
  315.     adr:=ADR(myhook);
  316.     IF rt.FontRequest (fontreq,ADR("Pick a font"),TAG(tagbuf,
  317.                        (*$ IF DoHook *) rt.foFilterFunc,adr, (*$ ENDIF *)
  318.                        tagEnd)) THEN
  319.       adr := fontreq^.attr.name; adr2 := fontreq^.attr.ySize;
  320.       adr:=TAG(tagbuf,adr, adr2);
  321.       vEZRequest (ADR("You picked the font:\n'%s'\nwith size:\n'%ld'"),
  322.                   ADR("Right"), NIL, NIL, adr);
  323.     ELSE
  324.       adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  325.       vEZRequest (ADR("You canceled.\nWas there no font you liked ?"),
  326.                   ADR("_Nope"),NIL,adr,NIL);
  327.     END;
  328.  
  329.     rt.FreeRequest (fontreq);
  330.   ELSE
  331.     vEZRequest (ADR("Out of memory!"),ADR("Oh boy!"),NIL, NIL, NIL);
  332.   END;  (* IF fontreq # NIL *)
  333.  
  334.   adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  335.   vEZRequest (ADR("NUMBER 6:\nPalette requester\nfunction: rt.PaletteRequest()"),
  336.               ADR("_Proceed"),NIL,adr,NIL);
  337.  
  338.   color := rt.PaletteRequest (ADR("Change palette"), NIL,TAG(tagbuf,tagEnd));
  339.   IF color = -1 THEN
  340.     vEZRequest (ADR("You canceled.\nNo nice colors to be picked ?"),
  341.                 ADR("Nah"),NIL, NIL, NIL);
  342.   ELSE
  343.     adr:=ADR(color);
  344.     vEZRequest (ADR("You picked color number %ld."),ADR("Sure did"),
  345.                 NIL, NIL,adr);
  346.   END;
  347.  
  348.   adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  349.   vEZRequest (ADR("NUMBER 7: (ReqTools 2.0)\n"+
  350.               "Volume requester\n"+
  351.               "function: rtFileRequest() with\n"+
  352.               "          RTFI_VolumeRequest tag."),
  353.               ADR("_Show me"), NIL,adr,NIL);
  354.  
  355.   filereq := rt.AllocRequestA (rt.TypeFileReq, NIL);
  356.   IF filereq # NIL THEN
  357.  
  358.     (*$ IF DoHook *)
  359.       myhook.entry := VolFilterfunc;
  360.       myhook.data:=REG (8+4);
  361.     (*$ ENDIF *)
  362.  
  363.     adr:=ADR(myhook);
  364.     IF rt.FileRequest (filereq, NIL, ADR("Pick a volume"),
  365.                        TAG(tagbuf,
  366.                        (*$ IF DoHook *) rt.fiFilterFunc,adr, (*$ ENDIF *)
  367.                        rt.fiVolumeRequest, 0, tagEnd)) THEN
  368.       adr := ADR(filereq^.dir);
  369.       vEZRequest (ADR("You picked the volume:\n'%s'"),
  370.                   ADR("Right"), NIL, NIL, adr);
  371.     ELSE
  372.       vEZRequest (ADR("You didn't pick a volume."),ADR("I did not"),NIL,NIL,NIL);
  373.     END;
  374.  
  375.     rt.FreeRequest (filereq);
  376.  
  377.   ELSE
  378.     vEZRequest (ADR("Out of memory!"),ADR("Oh boy!"), NIL, NIL, NIL);
  379.   END;  (* IF filereq # NIL *)
  380.  
  381.   adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  382.   vEZRequest (ADR("NUMBER 8: (ReqTools 2.0)\n"+
  383.               "Screen mode requester\n"+
  384.               "function: rtScreenModeRequest()\n"+
  385.               "Only available on Kickstart 2.0!"),
  386.               ADR("_Proceed"), NIL,adr,NIL);
  387.  
  388.   IF kickVersion < 37 THEN
  389.     adr:=TAG(tagbuf,rt.Underscore,"_",tagEnd);
  390.     vEZRequest (ADR("Your Amiga doesn't seem to have\n"+
  391.                 "Kickstart 2.0 in ROM so I am not\n"+
  392.                 "able to show you the Screen mode\n"+
  393.                 "requester.\n"+
  394.                 "So upgrade to 2.0 *now* :-)"),
  395.                 ADR("_Allright"), NIL,adr,NIL);
  396.   ELSE
  397.     scrmodereq:=rt.AllocRequestA (rt.TypeScreenModeReq, NIL);
  398.     IF scrmodereq#NIL THEN
  399.  
  400.       IF rt.ScreenModeRequest (scrmodereq,ADR("Pick a screen mode:"),
  401.                    TAG(tagbuf,rt.scFlags,LONGSET{rt.scReqDepthGad,rt.scReqSizeGads,
  402.                    rt.scReqAutoscrollGad,rt.scReqOverscanGad},tagEnd)) THEN
  403.         IF scrmodereq^.autoScroll#0 THEN adr:=ADR("On");
  404.                                     ELSE adr:=ADR("Off"); END;
  405.         adr2:=TAG(tagbuf,scrmodereq^.displayID,
  406.                   scrmodereq^.displayWidth,
  407.                   scrmodereq^.displayHeight,
  408.                   scrmodereq^.displayDepth,
  409.                   scrmodereq^.overscanType,
  410.                   adr);
  411.         vEZRequest (ADR("You picked this mode:\n"+
  412.                     "ModeID  : 0x%lx\n"+
  413.                     "Size    : %ld x %ld\n"+
  414.                     "Depth   : %ld\n"+
  415.                     "Overscan: %ld\n"+
  416.                     "AutoScroll %s"),
  417.                     ADR("Right"), NIL, NIL,adr2);
  418.       ELSE
  419.         vEZRequest (ADR("You didn't pick a screen mode."),ADR("Nope"),NIL,NIL,NIL);
  420.       END;  (*IF rt.ScreenModeRequest *)
  421.  
  422.       rt.FreeRequest (scrmodereq);
  423.     ELSE
  424.       vEZRequest (ADR("Out of memory!"),ADR("Oh boy!"),NIL,NIL,NIL);
  425.     END;  (* IF scrmodereq#NIL *)
  426.   END;  (* IF kickVersion < 37 *)
  427.   vEZRequestTags (ADR("That's it!\nHope you enjoyed the demo"),
  428.                   ADR("_Sure did"),NIL,NIL,
  429.                   TAG(tagbuf,rt.Underscore,"_",tagEnd));
  430. END ReqToolsDemo.
  431.